/**
 *  后台UI的配合sidebar使用的toolbar框架js代码
 *  by 庞斌
 *  date: 2020/09/03
 **/
layui.define(['element'], function (e) {
    var $ = layui.jquery,
        element = layui.element,
		SHOW = 'layui-show', HIDE = 'layui-hide', THIS = 'layui-this', DISABLED = 'layui-disabled', TEMP = 'template', APP_BODY = '#LAY_app_body', APP_FLEXIBLE = 'LAY_app_flexible', FILTER_TAB_TBAS = 'layadmin-layout-tabs', APP_SPREAD_SM = 'layadmin-side-spread-sm', TABS_BODY = 'layadmin-tabsbody-item', ICON_SHRINK = 'layui-icon-shrink-right', ICON_SPREAD = 'layui-icon-spread-left', SIDE_SHRINK = 'layadmin-side-shrink', SIDE_MENU = 'LAY-system-side-menu', TABS_HEADER = '#LAY_app_tabsheader>li';
		var tabsPageIndex = null;
		var tabsPageType = null;
		var tabsPageIndex = null;
		var tabsPageType = null;
		var events =function(e){
			var t = this;
		}
		//左侧侧边导航是否以小图标展示，true是小图标，false是不展示
		events.prototype.config= {
	        hasShrinkPanle:true,
	        
	    };
	    events.prototype.render=function(e,callback){
	    	var t = this;
	        t.config = $.extend({},t.config,e);
	        initEvents(t);
	        callback(t);
	    }
	    events.prototype.refresh=function() {
					var ELEM_IFRAME = '.layadmin-iframe',
						length = $('.' + TABS_BODY).length;

					if(tabsPageIndex >= length) {
						tabsPageIndex = length - 1;
					}

					var iframe = tabsBody(tabsPageIndex).find(ELEM_IFRAME);
					iframe[0].contentWindow.location.reload(true);
		};
		events.prototype.splitScreen=function(){
				//是否处于分屏状态，如果为true，就正处于分屏状态
				var splitScreenFlag=layui.cache.splitScreen;
				if(splitScreenFlag){
					$(".gt-details-addscreen").addClass("noShow");
					//不处于分屏状态
					layui.cache.splitScreen=false;
					//启用控制左侧面板的展示隐藏
					layui.cache.disShrink=false;
					layui.cache.shrinkflag=false;
					$(".gt-details-left").css("width","226px");
					$(".gt-details-right").css("left",'226px');
					$("#shrinkBtn").removeClass("layui-icon-spread-left layui-disabled").addClass("layui-icon-shrink-right");
					$(".gt-details-right").css("right","0");
					
					
					
				}else{
					$(".gt-details-addscreen").removeClass("noShow");
					$(".gt-details-right").css("right","0");
					layui.cache.shrinkflag=true;
					$(".gt-details-left").css("width","0");
					$(".gt-details-right").css("left",'0');
					$("#shrinkBtn").removeClass("layui-icon-shrink-right").addClass("layui-icon-spread-left layui-disabled");
					$(".gt-details-right").css("right","50%");
					//不禁用控制左侧面板的展示隐藏
					layui.cache.disShrink=true;
					//正处于分屏状态
					layui.cache.splitScreen=true;
				}
			};
			events.prototype.shrinkPanle=function(t){
				var disShrink=layui.cache.disShrink;
				//如果
				if(!disShrink){
					var shrinkflag=layui.cache.shrinkflag;
					if(shrinkflag){
						layui.cache.shrinkflag=false;
						if(t.config.hasShrinkPanle){
							$(".gt-details-left").removeClass("gt-side-shrink");
							if(!isEmpty(layui.cache.sideBar)){
								layui.cache.sideBar.cleanIconTip();
							}
						}else{
							$(".gt-details-left").css("width","226px");
						}
						$(".gt-details-right").css("left",'226px');
						$("#shrinkBtn").removeClass("layui-icon-spread-left").addClass("layui-icon-shrink-right");
						
					}else{
						layui.cache.shrinkflag=true;
						if(t.config.hasShrinkPanle){
							$(".gt-details-left").addClass("gt-side-shrink");
							if(!isEmpty(layui.cache.sideBar)){
								layui.cache.sideBar.addIconTip();
							}
							$(".gt-details-right").css("left",'60px');
						}else{
							$(".gt-details-right").css("left",'0');
							$(".gt-details-left").css("width","0");
						}
						$("#shrinkBtn").removeClass("layui-icon-shrink-right").addClass("layui-icon-spread-left");
					}
				}else{
					return false;
				}
			};
			events.prototype.back=function() {
					history.back();
			};
			//页面滚动
			events.prototype.rollPage=function(type, index) {
					var tabsHeader = $('#LAY_app_tabsheader'),
						liItem = tabsHeader.children('li'),
						scrollWidth = tabsHeader.prop('scrollWidth'),
						outerWidth = tabsHeader.outerWidth(),
						tabsLeft = parseFloat(tabsHeader.css('left'));

					//右左往右
					if(type === 'left') {
						if(!tabsLeft && tabsLeft <= 0) return;

						//当前的left减去可视宽度，用于与上一轮的页标比较
						var prefLeft = -tabsLeft - outerWidth;

						liItem.each(function(index, item) {
							var li = $(item),
								left = li.position().left;

							if(left >= prefLeft) {
								tabsHeader.css('left', -left);
								return false;
							}
						});
					} else if(type === 'auto') { //自动滚动
						(function() {
							var thisLi = liItem.eq(index),
								thisLeft;

							if(!thisLi[0]) return;
							thisLeft = thisLi.position().left;

							//当目标标签在可视区域左侧时
							if(thisLeft < -tabsLeft) {
								return tabsHeader.css('left', -thisLeft);
							}

							//当目标标签在可视区域右侧时
							if(thisLeft + thisLi.outerWidth() >= outerWidth - tabsLeft) {
								var subLeft = thisLeft + thisLi.outerWidth() - (outerWidth - tabsLeft);
								liItem.each(function(i, item) {
									var li = $(item),
										left = li.position().left;

									//从当前可视区域的最左第二个节点遍历，如果减去最左节点的差 > 目标在右侧不可见的宽度，则将该节点放置可视区域最左
									if(left + tabsLeft > 0) {
										if(left - tabsLeft > subLeft) {
											tabsHeader.css('left', -left);
											return false;
										}
									}
								});
							}
						}());
					} else {
						//默认向左滚动
						liItem.each(function(i, item) {
							var li = $(item),
								left = li.position().left;

							if(left + li.outerWidth() >= outerWidth - tabsLeft) {
								tabsHeader.css('left', -left);
								return false;
							}
						});
					}
			};
			//向左滚动页面标签
			events.prototype.leftPage=function(t) {
					t.rollPage('left');
			};
			//向右滚动页面标签
			events.prototype.rightPage=function(t) {
					t.rollPage();
			};
			//关闭当前标签页
			events.prototype.closeThisTabs=function() {
					closeThisTabs();
			};
			//关闭其它标签页
			events.prototype.closeOtherTabs=function(type) {
				var TABS_REMOVE = 'LAY-system-pagetabs-remove';
				if(type === 'all') {
					$(TABS_HEADER + ':gt(0)').remove();
					$(APP_BODY).find('.' + TABS_BODY + ':gt(0)').remove();

					$(TABS_HEADER).eq(0).trigger('click');
				} else {
					$(TABS_HEADER).each(function(index, item) {
						if(index && index != tabsPageIndex) {
							$(item).addClass(TABS_REMOVE);
							tabsBody(index).addClass(TABS_REMOVE);
						}
					});
					$('.' + TABS_REMOVE).remove();
				}
			};
			//关闭全部标签页
			events.prototype.closeAllTabs=function(t) {
				t.closeOtherTabs('all');
			};
			events.prototype.openTabsPage=function (url, text) {
				var e_this=this;
				//遍历页签选项卡
				var matchTo, tabs = $('#LAY_app_tabsheader>li'),
					path = url.replace(/(^http(s*):)|(\?[\s\S]*$)/g, '');
	
				tabs.each(function(index) {
					var li = $(this),
						layid = li.attr('lay-id');
	
					if(layid === url) {
						matchTo = true;
						tabsPageIndex = index;
					}
				});
				text = text || '新标签页';
				//如果未在选项卡中匹配到，则追加选项卡
				if(!matchTo) {
					$(APP_BODY).append([
						'<div class="layadmin-tabsbody-item layui-show">', '<iframe src="' + url + '" frameborder="0" class="layadmin-iframe"></iframe>', '</div>'
					].join(''));
					tabsPageIndex = tabs.length;
					element.tabAdd(FILTER_TAB_TBAS, {
						title: '<span>' + text + '</span>',
						id: url,
						attr: path
					});
				}
				//定位当前tabs
				element.tabChange(FILTER_TAB_TBAS, url);
				tabsBodyChange(tabsPageIndex, {
					url: url,
					text: text
				},e_this);
			};
			function initEvents(t){
				//点击事件
				$("body").on('click', '*[layadmin-event]', function() {
					var othis = $(this),
					attrEvent = othis.attr('layadmin-event');
					t[attrEvent](t) && t[attrEvent].call(this, othis)(t);
				});
				//监听 tab 组件切换，同步 index
				element.on('tab(layadmin-layout-tabs)', function(data) {
					tabsPageIndex = data.index;
				});
				//监听 tabspage 删除
				element.on('tabDelete(layadmin-layout-tabs)', function(obj) {
					var othis = $(TABS_HEADER + '.layui-this');
		
					obj.index && tabsBody(obj.index).remove();
					setThisRouter(othis,t);
		
					//移除resize事件
					//			    admin.delResize();
				});
		
				//监听选项卡的更多操作
				element.on('nav(layadmin-pagetabs-nav)', function(elem) {
					var dd = elem.parent();
					dd.removeClass(THIS);
					dd.parent().removeClass(SHOW);
				});
				//标签页标题点击
				$("body").on('click', "#LAY_app_tabsheader>li", function() {
					var othis = $(this),
						index = othis.index();
		
					tabsPageType = 'tab';
					tabsPageIndex = index;
					setThisRouter(othis,t);
				});
				//iframe自适应
				$(window).on('resize', function() {
					var $content = $('.admin-nav-card .layui-tab-content');
					$content.height($(this).height() - 41);
					$content.find('iframe').each(function() {
						$(this).height($content.height());
					});
				}).resize();
			}
		function closeThisTabs() {
			if(!tabsPageIndex) return;
			$(TABS_HEADER).eq(tabsPageIndex).find('.layui-tab-close').trigger('click');
		}
		
		 /**
		 * 判空
		 * @param {Object} str
		 */
		function isEmpty(str) {
			if(str == null || typeof(str) == 'undefined' || str == 'null' || str == '(null)' || str == '<null>' || str == 'undefined' || str == 'NULL' || str == undefined || str.length == 0) {
				return true;
			}
			if(typeof(str) == 'string' && str.replace(/(^s*)|(s*$)/g, "").length == 0) {
				return true;
			}
			if(typeof(str) == 'number' && str == 0) {
				return true;
			}
			return false;
		}
		//同步路由
		function setThisRouter(othis,t) {
			var layid = othis.attr('lay-id'),
				attr = othis.attr('lay-attr'),
				index = othis.index();
			tabsBodyChange(index, {
				url: attr
			},t);
			//location.hash = layid === setter.entry ? '/' : attr;
		}
		//获取页面标签主体元素
		function tabsBody(index) {
			return $(APP_BODY).find('.' + TABS_BODY).eq(index || 0);
		}
		//切换页面标签主体
		function tabsBodyChange(index, options,e_this) {
			var options = options || {};
			$(APP_BODY).find('.' + TABS_BODY).removeClass(SHOW);
			tabsBody(index).addClass(SHOW);
			e_this.rollPage('auto', index);

			//	      tabsPage()
			//执行 {setter.MOD_NAME}.tabsPage 下的事件
			//	      layui.event.call(this, setter.MOD_NAME, 'tabsPage({*})', );
		}
        var i = new events(e);
        layui.cache.tabTool=i;
    e("tabTool", i)
})